﻿Imports System.Data.SqlClient

Public Class EmpleadoDAO
    Public Function insertar(ByVal modelo As Empleado) As Empleado
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "INSERT INTO EMPLEADO (NOMBRE, APELLIDO, DNI, DIRECCION, TELEFONO, SEXO, FECHA_NAC) VALUES (@VALOR1, @VALOR2, @VALOR3, @VALOR4, @VALOR5, @VALOR6, @VALOR7)"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.Nombre)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.Apellido)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.DNI)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.Direccion)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.Telefono)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.Sexo)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.Fecha_nac)



            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("EmpleadoDAO: No insertó")
            End If

            ' LEER EL ULTIMO ID
            sql = "SELECT @@IDENTITY"
            cmd = New SqlCommand(sql, cn)
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.idEmpleado = CType(dr(0), Integer)
            End If

            dr.Close()
            cn.Close()

        Catch ex As Exception
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo

    End Function

    Public Sub actualizar(ByVal modelo As Empleado)
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "UPDATE EMPLEADO SET TELEFONO=@VALOR1, DIRECCION=@VALOR2 WHERE DNI=@VALOR3"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.Telefono)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.Direccion)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.DNI)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("EmpleadoDAO: No actualizó")
            End If

            cn.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
            Throw New DAOExcepcion(ex.ToString)
        End Try
    End Sub

    Public Function obtener(ByVal DNI As Integer) As Empleado
        Dim modelo As New Empleado

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT DNI, DIRECCION, TELEFONO, FECHA_NAC FROM EMPLEADO WHERE DNI=@VALOR1"
            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR1", DNI)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.DNI = dr(0).ToString
                modelo.Direccion = dr(1).ToString
                modelo.Telefono = dr(2).ToString
                modelo.Fecha_nac = dr(3).ToString
            End If

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function

    Public Function listar() As Collection
        Dim mostrar As New Collection
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT * FROM Empleado"
            Dim cmd As New SqlCommand(sql, cn)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            While dr.Read
                Dim empleado As New Empleado
                empleado.idEmpleado = dr(0).ToString
                empleado.Nombre = dr(1).ToString
                empleado.Apellido = dr(2).ToString
                empleado.DNI = dr(3).ToString
                empleado.Direccion = dr(4).ToString
                empleado.Telefono = dr(5).ToString
                empleado.Sexo = dr(6).ToString
                empleado.Fecha_nac = dr(7).ToString
                mostrar.Add(empleado)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try
        Return mostrar

    End Function
End Class
